import winim/lean
import winim/inc/winuser
import std/[times, os, strutils]
# import std/random

var
  lis: array[0..2, string] = ["#签到", "#打卡", "#美滋滋"]
  
proc time_count(interval:int = 2) = 
  var
    t1 = now()
    t2 = now() + initDuration(minutes = interval) 
  echo "current time[$1]" % [t1.format("HH:mm:ss")]
  echo "\n[$#] would be coming." % [t2.format("HH:mm:ss")]

proc mykey_press_release_u(keyno: int = 1) = 
  if 1 == keyno:
    keybd_event(0x11, 0, 0, 0)
    keybd_event(0x31, 0, 0, 0)
    keybd_event(0x31, 0, KEYEVENTF_KEYUP, 0)
    keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0)
  elif 2 == keyno:
    keybd_event(0x11, 0, 0, 0)
    keybd_event(0x32, 0, 0, 0)
    keybd_event(0x32, 0, KEYEVENTF_KEYUP, 0)
    keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0)
  elif 3 == keyno:
    keybd_event(0x11, 0, 0, 0)
    keybd_event(0x33, 0, 0, 0)
    keybd_event(0x33, 0, KEYEVENTF_KEYUP, 0)
    keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0)
  elif 4 == keyno:
    keybd_event(0x11, 0, 0, 0)
    keybd_event(0x34, 0, 0, 0)
    keybd_event(0x34, 0, KEYEVENTF_KEYUP, 0)
    keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0)
  elif 5 == keyno:
    keybd_event(0x11, 0, 0, 0)
    keybd_event(0x35, 0, 0, 0)
    keybd_event(0x35, 0, KEYEVENTF_KEYUP, 0)
    keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0)         

proc getContentFromClipboared(hData, phw:HWND) = 
  OpenClipboard(phw)
  EmptyClipboard()
  SetClipboardData(CF_UNICODETEXT, hData)
  GetClipboardData(CF_UNICODETEXT)
  CloseClipboard()
  SendMessage(phw, WM_PASTE, 0, 0)
  sleep(1000)
  # Ctrl+V
  keybd_event(0x11, 0,0,0)
  keybd_event(0x56, 0,0,0)
  keybd_event(0x56, 0, KEYEVENTF_KEYUP,0)
  keybd_event(0x11, 0, KEYEVENTF_KEYUP,0)

proc findWindowFromPoint(keyno: int = 1,iinterval:int =2) = 
  var 
    phw: HWND

  var
    pointold: LPPOINT
    point: POINT
    wintitle: LPWSTR
    isOk: bool

  var
    # content: seq[LPWSTR]
    pData, content: LPWSTR
    hData: HWND
    lpRect: LPRECT

  content = lis[1]
  # content = "加油" & ","
  if 2 == keyno:
    # content = "#打卡"
    content = lis[2]
  # initil hData
  hData = GlobalAlloc(GMEM_MOVEABLE, sizeof(content)+2)
  pData = cast[LPWSTR](GlobalLock(hData))
  lstrcpy(pData, content)
  GlobalUnlock(hData)

  point.x = 1347
  point.y = 761  
  GetCursorPos(pointold)
  mykey_press_release_u(keyno)
  sleep(4000)
  time_count(iinterval)
  sleep(1000)
  phw = WindowFromPoint(cast[POINT](pointold))
  ShowWindow(phw, SW_SHOW)
  SetCursorPos(1347, 761)
  mouse_event(MOUSEEVENTF_LEFTDOWN, 1394, 764, 0, 0)
  mouse_event(MOUSEEVENTF_LEFTUP, 1394, 764, 0, 0)
  sleep(2000)
  # mouse_event(MOUSEEVENTF_LEFTUP, 1394, 764, 0, 0)
  # sleep(2000)

  # OpenClipboard(phw)
  # EmptyClipboard()
  # # CF_TEXT 
  # # SetClipboardData(CF_TEXT, hData)
  # # GetClipboardData(CF_TEXT)
  # SetClipboardData(CF_UNICODETEXT, hData)
  # GetClipboardData(CF_UNICODETEXT)
  # CloseClipboard()
  # SendMessage(phw, WM_PASTE, 0, 0)
  # sleep(1000)
  # # Ctrl+V
  # keybd_event(0x11, 0,0,0)
  # keybd_event(0x56, 0,0,0)
  # keybd_event(0x56, 0, KEYEVENTF_KEYUP,0)
  # keybd_event(0x11, 0, KEYEVENTF_KEYUP,0)
  getContentFromClipboared(hData, phw)
  sleep(1000)
  # Enter Key Press
  keybd_event(VK_RETURN, 0,0,0)
  keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP,0)
  # SendMessage(phw, WM_KEYDOWN, VK_RETURN, 0)
  # SendMessage(phw, WM_KEYUP, VK_RETURN, 0)
  sleep(1000)

echo "--------start--------"
# findWindowFromPoint(2, 10)
sleep(2)
var n = 0
while n < 42:
  findWindowFromPoint(3, 30)
  findWindowFromPoint(4, 30)
  findWindowFromPoint(5, 30)
  sleep(1000 * 60 * 30)
  inc n


